Skip to content

Conversation

@Umiacha
Copy link
Contributor

@Umiacha Umiacha commented Aug 19, 2025

Изменения

  • Добавил query-параметр mark в ручку.
  • Написал фильтр для некоторых query-параметров ручки и переписал ее под него.
  • Написал тесты к новому параметру и добавил недостающие тесты на уже существующие.
  • Отрефакторил модели запросов-ответов.

Детали реализации

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

@github-actions
Copy link

💩 Code linting failed, use black and isort to fix it.

@github-actions
Copy link

github-actions bot commented Aug 19, 2025

Code Coverage

Coverage Report
FileStmtsMissCoverMissing
rating_api
   __main__.py440%1–7
   exceptions.py43784%35–37, 48–50, 58
rating_api/models
   base.py64494%24–27
   db.py126398%99, 152, 170
rating_api/routes
   base.py16194%41
   comment.py1233076%64, 82, 124–125, 146–155, 220–221, 223–224, 232–237, 264, 277, 304–315, 346
   exc_handlers.py32391%36, 43, 50
   lecturer.py93496%188, 196, 214, 220
rating_api/schemas
   base.py12467%6–9
   models.py127398%164, 166, 176
TOTAL6826391% 

Summary

Tests Skipped Failures Errors Time
72 0 💤 0 ❌ 0 🔥 22.480s ⏱️

@Umiacha Umiacha self-assigned this Aug 19, 2025
Copy link
Member

@Zimovchik Zimovchik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Со схемами респорсов, я не против того, чтобы использовать наследование там, но давай только одноуровневое. Тоесть если у тебя есть базовы CommentGet, то остальные схожие пусть наследуются от него только, а не друг от друга и тд. Наследование правда упростит чуть чуть код, но если переборщим, мне кажется уже будет не так читаемо. А еще надо проверить, чтобы в сваггере все норм отображалось

give_achievement = False
if give_achievement:
session.post(
await session.post(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

зачем

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наверное, стоило в беседе сначала спросить... Просто при запуске тестов я увидел следующее сообщение на эту строку:
RuntimeWarning: coroutine 'ClientSession._request' was never awaited
session.post(

Честно говоря, метод-то объявлен как синхронный, но возвращает асинхронный объект. В целом, тесты в любом случае отрабатывают, а в свагере я не тестил эту ручку. Тч я пока что править не буду, но если что расклад такой

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

просто это выдача ачивки и нам для завершения выполнения ручки явно не нужно ждать, что этот процесс завершится, то зафейлится оно или выполнится успешно не должно влиять на основную работу ручки. В тестах оно выдает ошибку, потому что ты не на тестовом или продовом стенде их запускаешь, там все норм. В идеале бы конечно просто локально не выдавать эту ачивку, но пока это не сделали

Comment on lines 122 to 123
lecturers_query = lecturer_filter.sort(lecturers_query)
lecturers_query = lecturer_filter.sort(lecturers_query)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему 2 раза?

Comment on lines 139 to 144
if (
mark is not None
and approved_comments
and sum(comment.mark_general for comment in approved_comments) / len(approved_comments) < mark
):
continue
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

поясни зачем это

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это логика для параметра mark из issue:
Если он передан (1ая строка) и есть комментарии, по которым можно считать оценку (2ая строка), то проверяем, что средняя (по approved_comments) mark_general лектора не меньше переданного параметра. Если меньше, то не добавляем этого лектора в список result (который и возвращается пользователю) и просто переходим к следующему (continue в цикле по лекторам)

@Zimovchik
Copy link
Member

а еще когда марк указывается, то давай нестрогое сравнение

@Umiacha
Copy link
Contributor Author

Umiacha commented Aug 22, 2025

а еще когда марк указывается, то давай нестрогое сравнение

Зачем? Просто по заданию надо возвращать лекторов "для которых оценка не ниже mark", что я и делаю (в условной конструкции сравнение строго, так как оно работает на отсеивание лекторов).
Или есть какая-то причина сделать и отсеивание нестрогим?

@Zimovchik
Copy link
Member

а еще когда марк указывается, то давай нестрогое сравнение

Зачем? Просто по заданию надо возвращать лекторов "для которых оценка не ниже mark", что я и делаю (в условной конструкции сравнение строго, так как оно работает на отсеивание лекторов). Или есть какая-то причина сделать и отсеивание нестрогим?

с точки зрения юзера намного логичнее делать нестрогое сравнение, например если я хотел бы получить всех лекторов с оценкой 2.0. + Фронты сказали, им так будет понятнее и удобнее

@Zimovchik Zimovchik merged commit abaa5b7 into main Aug 23, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Добавить фильтр для получения преподов по оценкам

3 participants